package demo.proxy;

import java.lang.reflect.Proxy;

/**
 * @description:
 * @author: GX
 * @time: 2025/10/31 10:31
 */
public class proxyUtil {
    public static Star createProxy(BigStar bigstar){
//        Star starBigStar = (Star) Proxy.newProxyInstance(proxyUtil.class.getClassLoader(),
//                new Class[]{Star.class},
//                new InvocationHandler(){
//                    @Override
//                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//                        if(method.getName().equals("sing")){
//                            System.out.println("准备sing");
//                            return method.invoke(bigstar,args);
//                        }else if(method.getName().equals("dance")){
//                            System.out.println("准备dance");
//                            return method.invoke(bigstar,args);
//                        }
//                        return method.invoke(bigstar,args);
//                    }
//                });
        //三个参数分别为类装载器，接口（），InvocationHandler
        //InvocationHandler 接口中只有一个方法，invoke，参数分别为代理对象，被代理的方法，方法参数
        Star starBigStar = (Star) Proxy.newProxyInstance(
                proxyUtil.class.getClassLoader(),
                new Class[]{Star.class},
                (proxy, method, args) -> {
                    if(method.getName().equals("sing")){
                        System.out.println("准备sing");
                        return method.invoke(bigstar,args);
                    }else if(method.getName().equals("dance")){
                        System.out.println("准备dance");
                        return method.invoke(bigstar,args);
                    }
                    return method.invoke(bigstar,args);
                });
        return starBigStar;
    }
}
